/*
 * Copyright (c) 2020-2099 the original author or authors. All rights reserve.
 */
package org.tianyun.cloud.data.redis.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 设置Redis缓存
 *
 * @auther ebert_chan
 */
@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SetCache {

    /**
     * 缓存key，变量可以使用{0}, {1}...{N}占位
     *
     * @return
     * @auther ebert_chan
     */
    String key();

    /**
     * 变量列表，使用SpEL表达式
     *
     * @return
     * @auther ebert_chan
     */
    String[] variables() default {};

    /**
     * 过期时间，默认0，表示不自动失效
     *
     * @return
     * @auther ebert_chan
     */
    long timeout() default 0;

    /**
     * 过期时间随机值，默认0，在timeout后增加一个随机数
     *
     * @return
     * @auther ebert_chan
     */
    int random() default 0;

    /**
     * 时间单位，默认单位：秒
     *
     * @return
     * @auther ebert_chan
     */
    TimeUnit unit() default TimeUnit.SECONDS;

}
